import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * Die Klasse Konsole ist eine selbst geschriebene Klasse, um Ein- und
 * Ausgabemethoden einfach zur Verfügung zu stellen.
 * 
 * @author christoph.stueber@mes-alsfeld.de
 * @version 01.09.2005 (letzte Änderung 05.03.12)
 */
public final class Konsole
{

    /**
     * default constructor.
     */
    private Konsole()
    {
    }

    /**
     * readDouble liest eine double Variable ein.
     * 
     * @param -
     * @return der über die Tastatur eingegebene double-Wert
     */
    public static double readDouble()
    {
        BufferedReader br;
        String inputString;
        double value = 0.0;

        br = new BufferedReader(new InputStreamReader(System.in));

        try
        {
            inputString = br.readLine();
            value = Double.parseDouble(inputString);
        } catch (IOException ex)
        {
            System.out.println("Lesefehler !");
        } catch (NumberFormatException ne)
        {
            System.out.println("Sie haben keinen double-Wert eingegeben !");
        }
        return value;
    }

    /**
     * readDouble liest eine double-Variable ein.
     * 
     * @param prompt
     *            als String
     * @return der über die Tastatur eingegebene double-Wert
     */
    public static double readDouble(final String prompt)
    {
        System.out.print(prompt);
        return readDouble();
    }

    /**
     * readInt liest eine int Variable ein.
     * 
     * @param -
     * @return der über die Tastatur eingegebene int-Wert
     */
    public static int readInt()
    {
        BufferedReader br;
        String inputString;
        int value = 0;

        br = new BufferedReader(new InputStreamReader(System.in));

        try
        {
            inputString = br.readLine();
            value = Integer.parseInt(inputString);
        } catch (IOException ex)
        {
            System.out.println("Lesefehler !");
        } catch (NumberFormatException ne)
        {
            System.out.println("Sie haben keine Zahl eingegeben !");
        }
        return value;
    }

    /**
     * readInt liest eine int Variable ein.
     * 
     * @param prompt
     *            als String
     * @return der über die Tastatur eingegebene int-Wert
     */
    public static int readInt(final String prompt)
    {
        System.out.print(prompt);

        return readInt();
    }

    /**
     * readString liest eine String Variable ein.
     * 
     * @return der über die Tastatur eingegebene char-Wert
     */
    public static String readString()
    {
        BufferedReader br;
        String inputString = "";
        br = new BufferedReader(new InputStreamReader(System.in));

        try
        {
            inputString = br.readLine();
        } catch (IOException ex)
        {
            System.out.println("Sie haben keine Zeichenkette eingegeben !");
        }

        return inputString;
    }

    /**
     * readString liest eine String Variable ein.
     * 
     * @param prompt
     *            als String
     * @return der über die Tastatur eingegebene char-Wert
     */
    public static String readString(final String prompt)
    {
        System.out.print(prompt);

        return readString();
    }

    /**
     * readChar liest eine char-Variable ein.
     * 
     * @return der über die Tastatur eingegebene char-Wert
     */
    public static char readChar()
    {
        String inputString = "";
        char c;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        try
        {
            inputString = br.readLine();
        } catch (IOException ex)
        {
            System.out.println("Sie haben keine Zeichenkette eingegeben !");
        }
        if (inputString.length() == 0)
        {
            c = '\n';
            ;
        }
        else
        {
            c = inputString.charAt(0);
        }
        return c;
    }

    /**
     * readChar liest eine char-Variable ein.
     * 
     * @param prompt
     *            als String
     * @return der über die Tastatur eingegebene char-Wert
     */
    public static char readChar(final String prompt)
    {
        System.out.print(prompt);

        return readChar();
    }

    /**
     * löscht den Bildschirm durch Ausgabe von 24 Leerzeilen.
     */
    public static void clearScreen()
    {
        for (int i = 0; i < 24; i++)
        {
            System.out.println();
        }
    }

    /**
     * wiederholt den in zeichen übergebenen String sooft wie in anzahl
     * angegeben und gibt die Zeichenkette als Ergebnis zurück.
     * 
     * @param zeichen
     *            String
     * @param anzahl
     *            int
     * @return String
     */
    public static String wiederhole(String zeichen, int anzahl)
    {
        if (anzahl > 1)
        {
            return zeichen + wiederhole(zeichen, anzahl - 1);
        }
        else
        {
            return zeichen;
        }
    }
}
